cmdex = '(?P<cmd>.*)'
procre = re.compile('^\s*' + pidex + '\s*' + pythonex + '\s*' + cmdex + '$')
xendre = re.compile('^/usr/sbin/xend\s*(start|restart)\s*.*$')
- procs = util.popen('ps -e -o pid,args')
+ procs = util.popen('ps -e -o pid,args 2>/dev/null')
for proc in procs:
pm = procre.match(proc)
if not pm: continue
return 0
# Read the pid of the previous invocation and search active process list.
pid = open(PID_FILE, 'r').read()
- lines = util.popen('ps ' + pid).readlines()
+ lines = util.popen('ps ' + pid + ' 2>/dev/null').readlines()
for line in lines:
if re.search('^ *' + pid + '.+xensv', line):
if not kill:
returns interface address as a string
"""
- fd = util.popen( '/sbin/ifconfig ' + dev )
+ fd = util.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
lines = _readlines(fd)
for line in lines:
m = re.search( '^\s+inet addr:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',
returns interface netmask as a string
"""
- fd = util.popen( '/sbin/ifconfig ' + dev )
+ fd = util.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
lines = _readlines(fd)
for line in lines:
m = re.search( '^.+Mask:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',
cmdex = '(?P<cmd>.*)'
procre = re.compile('^\s*' + pidex + '\s*' + pythonex + '\s*' + cmdex + '$')
xendre = re.compile('^/usr/sbin/xend\s*(start|restart)\s*.*$')
- procs = util.popen('ps -e -o pid,args')
+ procs = util.popen('ps -e -o pid,args 2>/dev/null')
for proc in procs:
pm = procre.match(proc)
if not pm: continue
"""
running = 0
if pid:
- lines = util.popen('ps %d' % pid).readlines()
+ lines = util.popen('ps %d 2>/dev/null' % pid).readlines()
exp = '^ *%d.+%s' % (pid, name)
for line in lines:
if re.search(exp, line):
from twisted.internet import utils
from twisted.internet import reactor
-from twisted.internet import protocol
from XendLogging import log
from StringIO import StringIO
-import os
-
# This is rather distasteful. Twisted doesn't play nicely with Python's
# standard os.popen, so here's an implementation of a synchronous popen that
# should work reliably. - MAW
done_flag = False
result = ''
+
+ def done(output):
+ global done_flag, result
+ done_flag = True
+ result = output
+
+ def err(output):
+ global done_flag
+# For normal use, suppress debug output here. It grumbles about stderr if the
+# program exits with $? != 0, even if stderr is redirected. Grrr!
+# log.debug("util.popen(\'%s\'): %s" % (cmd, output))
+ done_flag = True
+
+ d = utils.getProcessOutput(cmd)
+ d.addCallbacks(done, err)
- class PopenProtocol(protocol.ProcessProtocol):
- def connectionMade(self):
- self.transport.closeStdin() # we don't want stdin
- def outReceived(self, data):
- global result
- result = result + data
-# def errReceived(self, errdata):
-# log.debug("popen: %s" % errdata)
- def processEnded(self,status_obj):
- code = status_obj.value.exitCode
- if code:
- # todo: Should consider throwing an exception here.
- log.debug("popen: process exit with code %d" % code)
- global done_flag
- done_flag = True
-
- # using cmd.split is quick and dirty. OK as long as people don't try anything
- # tricky with quotes, etc.
- args = cmd.split(' ')
- reactor.spawnProcess(PopenProtocol(), args[0], args, os.environ)
-
- # Ick! Sit and ask the reactor to do IO, until the process finishes.
- # Can't just do "pass" here because then the reactor won't run at all :-(
while not done_flag:
reactor.iterate()